روابط یک به یک در لاراول
"جدولها توی دیتابیس معمولا به مرتبط هستن. مثلا جدول اخبار ممکنه با جدول نظرات، و یا جدول سفارشات توی یک فروشگاه، با جدول کاربران در ارتباط باشه. ارتباطها انواع گوناگونی دارن. مثلا برای یک خبر ممکنه چند نظر داشته باشیم (یک به چند). همچنین یک سفارش فقط مربوط به یک کاربر هست (یک به یک). یک رابطهی دیگه هم وجود داره به اسم چند به چند. مثلا یک شخص ممکنه چند تا شغل داشته باشه و یک شغل (معلمی) به چند شخص نسبت داده بشه."
یک رابطه Eloquent چیه؟
یک رابطه Eloquent چیزی بیشتر یک دستور SQL ساده نیست. اگه نخوایم از روابط الوکوئنت استفاده کنیم، این دستورات SQL رو خودمون باید بنویسیم. یعنی یه چیزی مثل این:
$posts = Post::all();
$comments = Comment::whereIn('post_id', $posts->pluck('id'))->get();
foreach ($posts as $post) {
$post->comments = $comments->where('post_id', $post->id);
}
اما با استفاده از روابطی الوکوئنت در اختیار ما گذاشته میتونیم همهی این تیکه کد رو بصورت زیر بنویسیم:
$postss = Post::with('comments')->get();
انواع روابطی که توسط لاراول پشتیبانی میشه
یک به یک (One To One)
یک به چند (One To Many)
چند به چند (Many To Many)
یک به یک واسطهای (Has One Through)
یک به چند واسطهای (Has Many Through)
یک به یک (پلی مورفیک)
یک به چند (پلی مورفیک)
چند به چند (پلی مورفیک)
یک به یک (One To One)
در این روابط یک موجودیت، فقط با یک موجودیت دیگه در ارتباط هست. مثلا یک کاربر فقط با یک پروفایل کاربری در ارتباط هست..
برای نوشتن این رابطه به متد hasOne نیاز داریم. کلاس مدل User رو باز میکنیم و یک رابطه توی اون بصورت زیر تعریف میکنیم:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
public function profile()
{
return $this->hasOne('App\Profile');
}
}
همانطور که کد بالا میبینیم پارامتری که متود hasOne دریافت می کنه نام مدلی هست که user با اون در ارتباط هستش
$profile = User::find(1)->profile;
با قطعه بالا می تونیم به پروفایل یوزر دسترسی پیدا کنیم
رابطه یک به یک معکوس
اگه بخوایم از طریق مدل Profile به کاربر دسترسی پیدا کنیم، باید توی کلاس مدل Profile یک رابطه بنویسیم و از متد belongsTo
استفاده کنیم:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Profile extends Model
{
public function user()
{
return $this->belongsTo('App\User');
}
}
//...
$user = Profile::find(1)->user;
متد belongsTo میتونه 3 تا آرگومان بگیره. مدلهای Account و User رو در نظر میگیریم:
- آرگومان اول: مشخص کردن مدلی که میخوایم ارتباط بزنیم. (ما میخوایم به مدل User ارتباط بزنیم)
- آرگومان دوم: میتونیم مشخص کنیم که کدوم ستون جدول accounts مد نظر ما هست برای ارتباط. چون مدل ما User هست، پیشفرض user_id در نظر گرفته میشه.
- آرگومان سوم: میتونیم مشخص میکنیم کدوم ستون جدول users مد نظر ما هست برای ارتباط. پیشفرض id هست.
خب دوستان امیدوارم از این مقاله استفاده کرده باشین.
ارسال دیدگاه